package back.Java的四种引用强弱软虚;

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;

public class PhantomReferenceExample {
    // 虚引用的强度最弱，虚引用指向的对象几乎没有任何意义。它主要用于跟踪对象的回收状态。
    // 虚引用是最弱的一种引用类型，它的主要作用是在对象被垃圾回收时收到一个系统通知。虚引用必须和引用队列（ReferenceQueue）联合使用。
    public static void main(String[] args) {
        // 创建引用队列
        ReferenceQueue<Object> referenceQueue = new ReferenceQueue<>();
        // 创建一个对象
        Object object = new Object();
        // 创建虚引用，并关联引用队列
        PhantomReference<Object> phantomReference = new PhantomReference<>(object, referenceQueue);

        // 断开强引用
        object = null;

        // 尝试触发垃圾回收
        System.gc();

        // 检查引用队列中是否有虚引用被加入
        System.out.println(referenceQueue.poll() == phantomReference);
    }
}
